package com.bbcare.followup.plat.service;

import java.util.List;
import java.util.Map;

import com.bbcare.followup.plat.vo.reserve.Reservation;
import com.bbcare.followup.plat.vo.reserve.Week2Reservation;

/**
 * 预约模块。
 */
public interface IReserveService {
    /**
     * 生成连续2周（14天）的空预约。
     */
    public void generate2WeekMachineReservation();

    /**
     * 生成2周的治疗师排班。
     */
    public void generateCurerSchedule();

    /**
     * 查询可用于预约的治疗仪时段。
     *
     * @return
     */
    public List<Week2Reservation> queryAvailableReservation();

    /**
     * 治疗仪下约。
     *
     * @param reservationId 预约ID。
     * @param patientId     患者ID。
     * @param accountId     下约人ID（登录ID）。
     * @return
     */
    public Map makeMachineReservation(final Integer reservationId, final String patientId, final String patientName, final String accountId);
    public Map makeMachineReservation2(final Integer machineId, final String cureDate, final String cureTime, final String patientId, final String patientName, final String accountId);

    /**
     * 取消预约。
     *
     * @param reservationId 预约ID。
     * @param doctorName    取消人ID（登录ID）。
     * @return
     */
    public Map cancelMachineReservation(final Integer reservationId, final String doctorName);
    public Map cancelMachineReservation2(final Integer machineId, final String cureDate, final String cureTime, final String doctorName);

    /**
     * 查询某个患者的所有预约。
     *
     * @param patientId
     */
    public List<Reservation> queryReservationByPat(final String patientId);

    /**
     * 查询治疗仪预约表格。
     *
     * @return
     */
    public Map<String, Object> queryMachineReseTable();

    /**
     * 查询某个治疗仪下已有的预约。
     * @param machineId
     */
    public List<Map<String,Object>> queryMachineReserved(final Integer machineId);

    /**
     * 查询某台治疗仪的今日预约。
     * @param machineId
     * @return
     */
    public List<Map<String,Object>> queryMachineReservedToday(final Integer machineId);


    /**
     * 查询治疗师的排班。
     *
     * @param auAccountUsername 登录手机号（工号）。
     */
    public List queryCurerSchedule(final String auAccountUsername);

    /**
     * 设定某天上/下午为上班。
     *
     * @param scheduleId
     * @param ap         上午或下午，a上午p下午。
     */
    public Map setWorkday(final Integer scheduleId, final String ap);
    /**
     * 设定某天上/下午为休假。
     * @param scheduleId
     * @param ap
     * @return
     */
    public Map setHoliday(final Integer scheduleId, final String ap);

    /**
     * 查询治疗师列表。
     * @return
     */
    public List<Map<String,Object>> queryCurerList(final Integer prjId, final String cureDate);

    /**
     * 查询治疗师的项目空闲时段。
     * @param date
     * @param curerId
     * @param prjId
     */
    public Map queryCurerIdle(final String date, final Integer curerId, final Integer prjId);

//    public List queryCurerReserved(final Integer curerId);

    /**
     * 下约治疗师。
     * @param prjId 治疗项目。
     * @param curerId
     * @param cureDate
     * @param cureTime
     * @param patientId
     * @param patientName
     * @param accountId
     * @return
     */
    public Map makeCurerReservation(final Integer prjId, final Integer curerId, final String cureDate, final String cureTime, final String patientId, final String patientName, final String accountId);

    public Map cancelCurerReservation(final Integer reservationId, final String operatorDoctor);
}